#ifndef YIGSYNTHMENU_H
#define YIGSYNTHMENU_H

// System includes
#include <QWidget>
#include <QComboBox>
#include <QPushButton>
#include <QColor>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QLabel>
#include <QDir>

// Local includes
#include "gui/yigsynthbutton.h"

/**
*   YigSynthMenu
*   Contains dragable synth objects which can be dropped in the NetworkChannelView to create new synth objects
*/
class YigSynthMenu : public QWidget
{
    Q_OBJECT

public:

    /**
    *   YigSynthMenu constructor
    *   @param QString The directory of the application
    *   @param QWidget *parent Should be 0 as we want this to be a floating menu.
    */
    explicit YigSynthMenu(QString appDirectory, QWidget *parent = 0);

    /**
    *   YigSynthMenu deconstructor
    *   Clean up the button list pointers
    */
    ~YigSynthMenu();

    /**
    *   getQueuedSynth grabs the name of the current synth, used for drag/drop synth creation
    *   QString the name of the synth, given to use from the synth button we've clicked
    */
    QString getQueuedSynth();

public slots:

private slots:

    /** called when a synthButton is pressed */
    void synthClick(QString synthName);
    /** called when a button is released, clears the queuedSynth var */
    void clearQueuedSynth();
    void createSynthList();

private:

    /** The scrollView contains the flow view that contains synthButtonList objects */
    QScrollArea scrollView;
    /** Used to parent add groupBox to the scrollView */
    QWidget groupWidget;
    /** The groupBox frames our buttones into one layout */
    QVBoxLayout vLayout,groupBox;
    /** list of YigSynthButtons that can be drag/dropped to create a new synth object in the current network channel */
    QList<QPushButton*> synthButtonList;
    /** queuedSynth is the name of a synth object that could possible be dropped on the GUI */
    QString queuedSynth;
    /** directory where synths are stored. We use to create our synth list for the menu */
    QDir synthDirectory;
};

#endif // YIGSYNTHMENU_H
